package ar.org.sstuyv


import grails.converters.JSON
import org.springframework.dao.DataIntegrityViolationException

class BarrioController {

    static allowedMethods = [save: "POST", update: "POST", delete: "POST"]

    def index() {
        redirect(action: "list", params: params)
    }

    def list(Integer max) {
        params.max = Math.min(max ?: 10, 100)
        [barrioInstanceList: Barrio.list(params), barrioInstanceTotal: Barrio.count()]
    }
	
	
	//TODO: Hay que renombrarlo listJson se usa para armar la grilla
	def combolistJson = {
		//def lst = Barrio.findAll()
		def lst = []
		
			StringBuffer buf = new StringBuffer("<select>")
			buf.append("<option value='0'>")
			buf.append('')
			buf.append("</option>")
			buf.append("</select>")
		
			render buf.toString()
	}
	
    def create() {
        [barrioInstance: new Barrio(params)]
    }

//    def save() {
//        def barrioInstance = new Barrio(params)
//        if (!barrioInstance.save(flush: true)) {
//            render(view: "create", model: [barrioInstance: barrioInstance])
//            return
//        }
//
//        flash.message = message(code: 'default.created.message', args: [message(code: 'barrio.label', default: 'Barrio'), barrioInstance.id])
//        redirect(action: "show", id: barrioInstance.id)
//    }

	def save = {
		def barrio = new Barrio()

		barrio.setNombre(params.nombre)
		
		barrio.setDireccionDeReferencia(params.direccionDeReferencia)

		Partido partido = Partido.findById(params.partido)		
		barrio.setPartido(partido)
		
//		DatoDelDominio datoDelDominio = DatoDelDominio.findByNombre(params.datoDelDominio)
//		barrio.setDatoDelDominio(datoDelDominio)
				
		NomenclaturaCatastralController ncc = new NomenclaturaCatastralController()	
		def n = params.ncPartido
		NomenclaturaCatastral nomenclatura = ncc.guardarNomenclaturaBarrio(	params.ncPartido, 
																			params.circunscripcion,
																			params.seccion,
																			params.numeroChacra,
																			params.letraChacra,
																			params.numeroQuinta,
																			params.letraQuinta,
																			params.numeroFraccion,
																			params.letraFraccion,
																			params.numeroManzana,
																			params.letraManzana,
																			params.numeroParcela,
																			params.letraParcela, )
	
		
		barrio.setNomenclaturaOrigen(nomenclatura)
		
		barrio.save(failOnError:true)
		
		render ""
		
	}
	
	
    def show(Long id) {
        def barrioInstance = Barrio.get(id)
        if (!barrioInstance) {
            flash.message = message(code: 'default.not.found.message', args: [message(code: 'barrio.label', default: 'Barrio'), id])
            redirect(action: "list")
            return
        }

        [barrioInstance: barrioInstance]
    }

    def edit(Long id) {
        def barrioInstance = Barrio.get(id)
        if (!barrioInstance) {
            flash.message = message(code: 'default.not.found.message', args: [message(code: 'barrio.label', default: 'Barrio'), id])
            redirect(action: "list")
            return
        }

        [barrioInstance: barrioInstance]
    }

//    def update(Long id, Long version) {
//        def barrioInstance = Barrio.get(id)
//        if (!barrioInstance) {
//            flash.message = message(code: 'default.not.found.message', args: [message(code: 'barrio.label', default: 'Barrio'), id])
//            redirect(action: "list")
//            return
//        }
//
//        if (version != null) {
//            if (barrioInstance.version > version) {
//                barrioInstance.errors.rejectValue("version", "default.optimistic.locking.failure",
//                          [message(code: 'barrio.label', default: 'Barrio')] as Object[],
//                          "Another user has updated this Barrio while you were editing")
//                render(view: "edit", model: [barrioInstance: barrioInstance])
//                return
//            }
//        }
//
//        barrioInstance.properties = params
//
//        if (!barrioInstance.save(flush: true)) {
//            render(view: "edit", model: [barrioInstance: barrioInstance])
//            return
//        }
//
//        flash.message = message(code: 'default.updated.message', args: [message(code: 'barrio.label', default: 'Barrio'), barrioInstance.id])
//        redirect(action: "show", id: barrioInstance.id)
//    }

	
	   def update =  {
        def barrio = Barrio.findById(params.id)
		
		barrio.setNombre(params.nombre)
		
		barrio.setDireccionDeReferencia(params.direccionDeReferencia)
		
		def p = params.partido
		
		Partido partido = Partido.findById(params.partido)
		barrio.setPartido(partido)
	
		
		def datodel = params.datoDelDominio
		
		DatoDelDominio datoDelDominio = DatoDelDominio.findByNombre(params.datoDelDominio) 
		barrio.setDatoDelDominio(datoDelDominio)
		
		NomenclaturaCatastralController ncc = new NomenclaturaCatastralController()	
		def n = params.ncPartido
		NomenclaturaCatastral nomenclatura = ncc.guardarNomenclaturaBarrio(	params.ncPartido, 
																			params.circunscripcion,
																			params.seccion,
																			params.numeroChacra,
																			params.letraChacra,
																			params.numeroQuinta,
																			params.letraQuinta,
																			params.numeroFraccion,
																			params.letraFraccion,
																			params.numeroManzana,
																			params.letraManzana,
																			params.numeroParcela,
																			params.letraParcela, )		
		barrio.setNomenclaturaOrigen(nomenclatura)
		
		
		barrio.save(failOnError:true)
		render ''
    } 
	
    def delete(Long id) {
        def barrioInstance = Barrio.get(id)
        if (!barrioInstance) {
            flash.message = message(code: 'default.not.found.message', args: [message(code: 'barrio.label', default: 'Barrio'), id])
            redirect(action: "list")
            return
        }

        try {
            barrioInstance.delete(flush: true)
            flash.message = message(code: 'default.deleted.message', args: [message(code: 'barrio.label', default: 'Barrio'), id])
            redirect(action: "list")
        }
        catch (DataIntegrityViolationException e) {
            flash.message = message(code: 'default.not.deleted.message', args: [message(code: 'barrio.label', default: 'Barrio'), id])
            redirect(action: "show", id: id)
        }
    }
	
	
	def listJson = {
		
		def sortIndex = params.sidx ?: 'nombreBarrio'
		def sortOrder  = params.sord ?: 'asc'
		def maxRows = Integer.valueOf(params.rows)
		def currentPage = Integer.valueOf(params.page) ?: 1
		def rowOffset = currentPage == 1 ? 0 : (currentPage - 1) * maxRows
		
		def barrio = Barrio.createCriteria().list(max: maxRows, offset: rowOffset) {
		}
		
		def totalRows = barrio.totalCount
		def numberOfPages = Math.ceil(totalRows / maxRows)
		
		def results = barrio?.collect {
			[
				 cell: [ it.nombre, it.partido?.nombre, it.direccionDeReferencia, it.datoDelDominio?.nombre,
					 	it.nomenclaturaOrigen?.spartido,
						it.nomenclaturaOrigen?.circunscripcion,
						it.nomenclaturaOrigen?.seccion,
						it.nomenclaturaOrigen?.numeroChacra,
						it.nomenclaturaOrigen?.letraChacra,
						it.nomenclaturaOrigen?.numeroQuinta,
						it.nomenclaturaOrigen?.letraQuinta,
						it.nomenclaturaOrigen?.numeroFraccion,
						it.nomenclaturaOrigen?.letraFraccion,
						it.nomenclaturaOrigen?.numeroManzana,
						it.nomenclaturaOrigen?.letraManzana,
						it.nomenclaturaOrigen?.numeroParcela,
						it.nomenclaturaOrigen?.letraParcela
					 ],
				 id: it.id
			]
		}

		
		def jsonData = [rows: results, page: currentPage, records: totalRows, total: numberOfPages]
		render jsonData as JSON
	
	}
	
	
	
	def getColumnas = {
		def data
		data = [colmodel: [
//							[ name:'id',index:'id', editable : true, width:70],
							[ name:'nombre',index:'nombre', editable : true, width:60],
							[ name : 'partido', index : 'partido', width : 80, editable : true, edittype : "select",
								editoptions : [ dataUrl : "/SIG/partido/listJson"]],
							[ name:'direccionDeReferencia',index:'direccionDeReferencia', editable : true, width:50],
							[ name:'datoDelDominio',index:'datoDelDominio', editable : true, width:50],
							[ name:'ncPartido',index:'ncPartido', editable : true, width:10],
							[ name:'circunscripcion',index:'circunscripcion', editable : true, width:10],
							[ name:'seccion',index:'seccion', editable : true, width:10],
							[ name:'numeroChacra',index:'numeroChacra', editable : true, width:10],
							[ name:'letraChacra',index:'letraChacra', editable : true, width:10],
							[ name:'numeroQuinta',index:'numeroQuinta', editable : true, width:10],
							[ name:'letraQuinta',index:'letraQuinta', editable : true, width:10],
							[ name:'numeroFraccion',index:'numeroFraccion', editable : true, width:10],
							[ name:'letraFraccion',index:'letraFraccion', editable : true, width:10],
							[ name:'numeroManzana',index:'numeroManzana', editable : true, width:10],
							[ name:'letraManzana',index:'letraManzana', editable : true, width:10],
							[ name:'numeroParcela',index:'numeroParcela', editable : true, width:10],
							[ name:'letraParcela',index:'letraParcela', editable : true, width:10],
							],
							

				colnames: ['Nombre', 'Partido', 'Direccion de Referencia', 'Dato del Dominio', 
							'Pdo',
							'cc',
							'sc',
							'nro Ch',
							'l Ch',
							'nro Qta',
							'l Qta',
							'nro fc',
							'l fc',
							'nro mz',
							'l mz',
							'nro pc',
							'l pc']
			];
		print data as JSON
		render data as JSON
		
	}

	def listBarrios = {
		
		def barriosPorPartido = Barrio.createCriteria().list() {
			if (params.partido) eq('partido.id', params.partido?.toInteger())
		}
		
		def results = barriosPorPartido?.collect {
			[
				it.nombre,
				it.id
				
				
			]
		}
		
		render results
	}
}
